控制语句
一、程序三大结构
程序全部逻辑由顺序、选择、循环三种结构组成:
顺序:自上而下依次执行
选择(分支):条件成立执行对应代码,
如果…则…循环:条件成立重复执行代码,
如果满足则反复执行
二、选择结构if分支
1. 条件真假规则
条件为False:False、0、0.0、None、空容器(空字符串/列表/字典/元组/集合)、空range
其余所有数据均为True;if条件内不能写赋值=`
2. 单分支 if
语法
if 条件: 代码块 #缩进统一
示例
num = input("输入数字:")
if int(num) < 10:
print("小于10的数:"+num)3. 双分支 if…else
num = input("输入数字:")
if int(num) < 10:
print(num)
else:
print("数字太大")三元运算符(简写双分支)
格式:真值 if 条件 else 假值
num = input("输入数字")
res = num if int(num)<10 else "数字太大"
print(res)4. 多分支 if…elif…else
特点:分支从上往下依次判断,匹配即结束,不能随意调换顺序
#成绩分级
score = int(input("输入分数"))
if score < 60:
grade = "不及格"
elif score < 80:
grade = "及格"
elif score < 90:
grade = "良好"
elif score <= 100:
grade = "优"
print(f"分数{score},等级{grade}")坐标判断象限
x = int(input("x:"))
y = int(input("y:"))
if x == 0 and y == 0:
print("原点")
elif x == 0:
print("y轴")
elif y == 0:
print("x轴")
elif x>0 and y>0:
print("第1象限")
elif x<0 and y>0:
print("第二象限")
elif x<0 and y<0:
print("第三象限")
else:
print("第四象限")5. if嵌套
缩进控制层级关系
score = int(input("输入分数"))
if 0<=score<=100:
if score>=90:
g = "A"
elif score>=80:
g = "B"
elif score>=70:
g = "C"
elif score>=60:
g = "D"
else:
g = "E"
else:
g = "分数非法"
print(g)三、循环结构
1. while循环
语法
while 条件: 循环体
循环体内必须修改条件变量,否则死循环
#0~10遍历 num = 0 while num <=10: print(num) num +=1 #1~100求和 all_sum = 0 n = 0 while n<=100: all_sum +=n n +=1 print(all_sum)
2. for循环
适用:遍历可迭代对象(字符串、列表、元组、字典、集合、range、生成器)
for 变量 in 可迭代对象: 循环体
range用法
range(start,end,step)左闭右开,start默认0,step默认1
#1~100求和、奇偶拆分
sum_all=sum_even=sum_odd=0
for num in range(101):
sum_all += num
if num%2 ==0:
sum_even +=num
else:
sum_odd +=num
print(sum_all,sum_even,sum_odd)
#遍历字典
d = {"name":"gaoqi","age":18}
for k in d: #遍历键
print(k)
for v in d.values(): #遍历值
print(v)
for item in d.items(): #键值对
print(item)3. 循环嵌套
#九九乘法表
for m in range(1,10):
for n in range(1,m+1):
print(f"{m}*{n}={m*n}",end="\t")
print()
#筛选薪资大于15000
tb = [{"name":"高小一","age":18,"salary":30000,"city":"北京"},
{"name":"高小二","age":19,"salary":20000,"city":"上海"},
{"name":"高小五","age":20,"salary":10000,"city":"深圳"}]
for info in tb:
if info["salary"]>15000:
print(info)四、循环控制关键字 break / continue / else
break:跳出当前所在整层循环
while True:
s = input("输入字符,Q退出:")
if s.upper()=="Q":
break
print(s)continue:终止本次循环,直接进入下一轮
#录入薪资,负数重输
count=0
total=0
sal_list=[]
while True:
s = input("输入薪资,Q结束:")
if s.upper()=="Q":
break
money = float(s)
if money<0:
print("无效,重新输入")
continue
count +=1
total +=money
sal_list.append(money)
print(count,sal_list,total,total/count)循环else:循环没有被break打断才执行else代码
sum_s =0
salary = []
for i in range(4):
s = input("输入薪资:")
if s.upper()=="Q":
break
num = float(s)
if num<0:
continue
salary.append(num)
sum_s +=num
else:
print("4人全部录入完成")
print(salary,sum_s/4)五、循环代码优化
减少循环内部计算,嵌套循环计算提到外层
优先使用局部变量
字符串拼接用
join(),少用+列表增删尽量在尾部操作
六、zip并行迭代
多个序列同步遍历,以最短容器长度为准
names = ("高淇","高老二","高老三")
ages = (18,16,20)
jobs = ("老师","程序员","公务员")
for n,a,j in zip(names,ages,jobs):
print(n,a,j)七、四大推导式(快速生成序列)
1. 列表推导式 [表达式 for x in 迭代对象 if 条件]
a = [x*2 for x in range(1,20) if x%5==0] # [10,20,30]
2. 字典推导式 {key:value for k,v in zip(keys,vals)}
citys = ["北京","上海","深圳","广州"]
d = {i*100:city for i,city in zip(range(1,5),citys)}3. 集合推导式 {表达式 for x in 迭代对象 if 条件}
s = {x for x in range(1,100) if x%9==0}4. 生成器推导式 (表达式 for x in 迭代对象)
生成器只能遍历一次,不直接生成元组
gen = (x for x in range(10))
八、实操代码汇总
#1.成绩评级
score = int(input("输入分数:"))
if score<60:
print("不及格")
elif score<80:
print("及格")
elif score<90:
print("良好")
else:
print("优")
#2.while 1~100求和
all_sum=odd=even=0
i=1
while i<=100:
all_sum+=i
if i%2==0:
even+=i
else:
odd+=i
i+=1
print(all_sum,odd,even)
#3.for 1~100求和
all_sum=odd=even=0
for i in range(1,101):
all_sum+=i
if i%2==0:
even+=i
else:
odd+=i
print(all_sum,odd,even)
#4.海龟绘图-同心圆
import turtle
p = turtle.Pen()
radius = [x*10 for x in range(1,11)]
colors = ("red","green","yellow","black")
p.width(4)
for r,i in zip(radius,range(len(radius))):
p.penup()
p.goto(0,-r)
p.pendown()
p.color(colors[i%len(colors)])
p.circle(r)
turtle.done()
#5.18*18棋盘
import turtle
w = 30
num =18
x_start = (-400,400)
y_start = (-400,400)
t = turtle.Pen()
t.speed(10)
#横线
for i in range(num+1):
t.penup()
t.goto(x_start[0],x_start[1]-w*i)
t.pendown()
t.goto(x_start[0]+w*num,x_start[1]-w*i)
#竖线
for i in range(num+1):
t.penup()
t.goto(y_start[0]+w*i,y_start[1])
t.pendown()
t.goto(y_start[0]+w*i,y_start[1]-w*num)
t.hideturtle()
turtle.done()上一篇:函数
下一篇:python基础概念


